# _*_ coding: UTF-8 _*_
# @Time     : 2020/10/19 下午 03:44
# @Author   : Li Jie
# @Site     : http://www.cdtest.cn/
# @File     : exception_test.py
# @Software : PyCharm

# 语法错误
# def foo0():
#     print('这是一个语法错误)

# 异常
# 什么是异常？比代码错误更低一级的错误情况，在不运行代码时难以发现的代码错误
# 异常会中断程序的执行
def foo1():
    for i in range(-2, 3):
        print(50 / i)
        print('除法之后的语句')


# 异常的处理方式：try -except：
# try-except
def foo2():
    for i in range(-2, 3):
        try:  # 可能出异常的代码块
            print(50 / i)
        except Exception as e:  # 出现异常之后执行的语句
            print('除零异常', e)
        print('除法之后的语句')


# try-except-else
# except和else同时只会执行一个，取决于try的代码是否有异常
def foo3():
    for i in range(-2, 3):
        try:  # 可能出异常的代码块
            print(50 / i)
        except Exception as e:  # 出现异常之后执行的语句
            print('除零异常', e)
        else:  # 没有出现异常执行的语句
            print('没有异常')
        print('除法之后的语句')
        print('--------------')


# try-except-else-finally
def foo4():
    for i in range(-2, 3):
        try:  # 可能出异常的代码块
            print(50 / i)
        except Exception as e:  # 出现异常之后执行的语句
            print('除零异常', e)
        else:  # 没有出现异常执行的语句
            print('没有异常')
        finally:  # 一定会执行的语句
            print('不管有没有异常都要执行')
        print('除法之后的语句')
        print('--------------')


# raise抛出异常
def divsion(a, b):
    if b == 0:
        raise ZeroDivisionError('除数为0')
    return a / b


def foo5():
    a = int(input('请出入被除数：'))
    b = int(input('请输入除数：'))
    try:
        print(f'{a}除以{b}等于：{divsion(a, b)}')
    except Exception as e:
        print(e)


if __name__ == "__main__":
    # foo0()
    # foo1()
    # foo2()
    # foo3()
    # foo4()
    foo5()